Harden DCP chat transforms and clarify compacted output#510
Open
gmnstr wants to merge 4 commits into
Open
Conversation
Replace the opaque '[Old tool result content cleared]' placeholder with '[Tool output compacted locally; original in session storage.]' to make it clear that compaction is a local optimization, not a provider failure. This reduces confusion when users see compacted output in their sessions.
Apply three defensive patches from 2026-04-16 session hardening: 1. hooks.ts: Wrap createChatMessageTransformHandler body in try/catch so any DCP transform failure degrades safely instead of aborting the session. 2. message-ids.ts: Replace hard-throw on alias exhaustion with graceful degradation (return empty string). This prevents session crashes when message volume exceeds the referenceable range. 3. token-utils.ts: (already committed) Improve compacted tool output placeholder message for clarity. These are fail-open defensive changes that reduce ghost/hard-stop behavior when DCP encounters edge cases.
Tarquinen
reviewed
May 12, 2026
| } | ||
|
|
||
| export const COMPACTED_TOOL_OUTPUT_PLACEHOLDER = "[Old tool result content cleared]" | ||
| export const COMPACTED_TOOL_OUTPUT_PLACEHOLDER = "[Tool output compacted locally; original in session storage.]" |
Collaborator
There was a problem hiding this comment.
This is a string that is set by opencode for messages that they prune, did they change it to yours?
Tarquinen
reviewed
May 12, 2026
| throw new Error( | ||
| `Message ID alias capacity exceeded. Cannot allocate more than ${formatMessageRef(MESSAGE_REF_MAX_INDEX)} aliases in this session.`, | ||
| ) | ||
| // Graceful degradation: stop allocating aliases instead of hard-throwing. |
Collaborator
There was a problem hiding this comment.
This doesn't make much sense we already allow for 9999 messages and if somehow a session has more than that I would rather see an error than for things to silently fail
Tarquinen
reviewed
May 12, 2026
| if (state.sessionId) { | ||
| await logger.saveContext(state.sessionId, output.messages) | ||
| } | ||
| } catch (err) { |
Collaborator
There was a problem hiding this comment.
I think this would still allow these functions to mutate messages, if there is an error thrown we should probably use a deep copy or something like that instead of a partially completed mutation wherever the error occured
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Verification
npm testupstream/devwith no conflictsNotes